package exam.huawei.string;

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.stream.Collectors;

/**
 * 敏感字段加密
 * <p>
 * 给定一个由多个命令字组成的命令字符串:
 * 1、字符串长度小于等于127字节，只包含大小写字母，数字，下划线和偶数个双引号:2、命令字之间以一个或多个下划线 进行分割;
 * 3、可以通过两个双引号”来标识包含下划线 的命令字或空命令字 (仅包含两个双引号的命令字)双引号不会在命令字内部出现:
 * 请对指定索引的敏感字段进行加密，替换为****** (6个*) ，并删除命令字前后多余的下划线
 * 如果无法找到指定索引的命令字，输出字符串 ERROR。
 */
public class Example12 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int k = Integer.parseInt(sc.nextLine());
        String s = sc.nextLine();

        System.out.println(getResult(k, s));
    }

    /**
     * 将长字符串用不同的StringBuilder来模拟入栈出栈操作，是一种通用解法
     */
    public static String getResult(int index, String content) {
        StringBuilder stack = new StringBuilder();
        LinkedList<String> result = new LinkedList<>();

        for (int i = 0; i < content.length(); i++) {
            char c = content.charAt(i);

            if (c == '_' && (stack.length() == 0 || stack.charAt(0) != '"')) {
                // 遇到_时，判断它是分隔符，还是被"包住的密码部分
                result.add(stack.toString());
                stack = new StringBuilder();
            } else if (c == '"' && stack.length() != 0) {
                // 第一个"不清空栈，第二个清空
                stack.append(c);
                result.add(stack.toString());
                stack = new StringBuilder();
            } else {
                // 正常字符，拼接到stack中
                stack.append(c);
            }
        }

        if (stack.length() > 0) result.add(stack.toString());

        // 去除空串
        List<String> ans = result.stream().filter(str -> !"".equals(str)).collect(Collectors.toList());

        if (index > ans.size() - 1) return "ERROR";
        ans.set(index, "******");

        StringJoiner sj = new StringJoiner("_");
        for (String an : ans) sj.add(an);
        return sj.toString();
    }
}